package com.jrx.anytxn.customer.mapper.ext;

import com.jrx.anytxn.customer.entity.CmCustomerRightInfo;
import com.jrx.anytxn.customer.mapper.base.CmCustomerRightInfoMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface ExtCmCustomerRightInfoMapper extends CmCustomerRightInfoMapper {

    /**
     * 根据客户号 租户号查询 客户权益表
     * @param customerId
     * @param tenantId
     * @return
     */
    List<CmCustomerRightInfo> selectByCustomerIdAndTenantIdAndChannel(@Param("customerId")String customerId,
                                                            @Param("tenantId") String tenantId,
                                                            @Param("channel")String channel);

    /**
     * 根据客户id、租户号 查询客户权益信息表
     * @param customerId
     * @param tenantId
     * @return
     */
    List<CmCustomerRightInfo> selectByCustomerIdAndTenantId(@Param("customerId")String customerId,
                                                                      @Param("tenantId") String tenantId);

    /**
     * 根据客户号 租户号 订单号查询 客户权益表
     * @param customerId
     * @param tenantId
     * @param loanId
     * @return
     */
    CmCustomerRightInfo selectByCustomerIdAndTenantIdAndLoanId(@Param("customerId")String customerId,
                                                               @Param("tenantId") String tenantId,
                                                               @Param("loanId") String loanId);

    /**
     * 根据客户号 租户号查询 客户权益表
     * @param customerId
     * @param tenantId
     * @return
     */
    CmCustomerRightInfo selectByCustRightId(@Param("custRightId")Long custRightId,@Param("customerId")String customerId, @Param("tenantId") String tenantId);

    /**
     * 根据id和客户id查询记录
     * @param id
     * @param customerId
     * @param tenantId
     * @return
     */
    CmCustomerRightInfo selectByIdAndCustomerId(Long id, String customerId, String tenantId);

    /**
     * 根据权益兑换记录id和客户id查询记录
     * @param customerId
     * @param tenantId
     * @param exchangeLogId
     * @return
     */
    CmCustomerRightInfo selectByCustomerIdAndExchangeLogId(String customerId, String tenantId, Long exchangeLogId);

    /**
     * 根据 客户号、租户号、权益id、活动号 查询客户权益信息表
     * @param customerId
     * @param tenantId
     * @param rightsId
     * @param activityId
     * @return
     */
    CmCustomerRightInfo selectByCustomerIdAndTenantIdAndRightsIdAndActivityId(String customerId,String tenantId,String rightsId,String activityId);

    /**
     * 根据 客户号、租户号、权益资格id、活动号 查询客户权益信息表
     * @param customerId
     * @param tenantId
     * @param qualificationId
     * @param activityId
     * @return
     */
    List<CmCustomerRightInfo> selectByCustomerIdAndTenantIdAndQualificationIdAndActivityId(String customerId,String tenantId,String qualificationId,String activityId);

    /**
     * 更新优惠券状态
     * @param custRightId
     * @param loanId
     * @param rightsStatus
     * @param tenantId
     * @param customerId
     */
    void updateCustRight(Long custRightId, String loanId, String rightsStatus, String tenantId, String customerId);

    /**
     * 更新权益兑换状态，可用于权益使用和权益撤销
     * @param id
     * @param tenantId
     * @param customerId
     * @param rightsId
     * @param rightsStatus
     */
    void updateRightStatus(Long id, String tenantId, String customerId, String rightsId, String rightsStatus, Long exchangeLogId);

    /**
     * 根据参数查询客户权益信息
     * @param tenantId
     * @param channel
     * @param customerId
     * @return
     */
    List<CmCustomerRightInfo> selectByPage(@Param("tenantId") String tenantId, @Param("channel") String channel,
                                           @Param("customerId") String customerId);

    CmCustomerRightInfo selectByCustomerIdAndTenantIdAndId(@Param("customerId")String customerId,
                                                               @Param("tenantId") String tenantId,
                                                               @Param("id") Long id);

    /**
     *  批量添加客户权益信息
     */
    int batchInsertSelective(List<CmCustomerRightInfo> contacts);

}